package com.sinya.demo_charts;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;

import org.xclcharts.chart.DialChart;
import org.xclcharts.common.DensityUtil;
import org.xclcharts.common.MathHelper;
import org.xclcharts.renderer.XEnum;
import org.xclcharts.view.GraphicalView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Koizumi Sinya on 2016/1/21.
 */
public class DialCharView_2 extends GraphicalView {

    /**
     * 用来绘制大圈环形数据图（跨度是300°）
     */
    private DialChart mChart = new DialChart(false);

    /**
     * 百分比
     */
    private float mBigPercent = 0.46f;
    private float mSmallPercent = 0.73f;

    public DialCharView_2(Context context) {
        super(context);
        initView();
    }

    public DialCharView_2(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView();
    }

    public DialCharView_2(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initView();
    }

    public void setPercent(float b, float s) {
        this.mBigPercent = b;
        this.mSmallPercent =s;
        //清理
        mChart.clearAll();
        addAxis();
    }

    // [+] Override

    @Override
    public void render(Canvas canvas) {
        try {
            mChart.render(canvas);

        } catch (Exception e) {
            Log.e("Sinya", e.toString());
        }
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mChart.setChartRange(w, h);
    }

    // [-] Override
    // [+] init


    // [-] init
    // [+] 对外提供修改数据的方法

    /*public void setCurrentStatus(float percentage) {
        mBigPercent = percentage;

        //清理
        mChart.clearAll();

        //设置当前百分比
        mChart.getPointer().setPercentage(mBigPercent);
        addAxis();

    }*/


    // [-] 对方提供修改数据的方法
    private void initView() {
        chartView();
    }

    /**
     * 绘制图表
     */
    private void chartView() {
        try {

            //设置padding
            mChart.setPadding(DensityUtil.dip2px(getContext(), 40), DensityUtil.dip2px(getContext(), 40),DensityUtil.dip2px(getContext(), 40), DensityUtil.dip2px(getContext(), 40));
            //设置标题背景
            //mChart.setApplyBackgroundColor(true);
            //绘制边框
            //mChart.showRoundBorder();

            //绘制环形图度数
            mChart.setStartAngle(115f);
            mChart.setTotalAngle(310f);

            //绘制环形图内容
            addAxis();

        } catch (Exception e) {

        } finally {

        }
    }


    /**
     * 给环表添加坐标数据
     */
    public void addAxis() {

        /**外层刻度线*/
        //先画最外层刻度
        List<String> bigMarks = new ArrayList<>();
        for (int i = 0; i < 11; i++) {
            if (0 == i) {
                bigMarks.add("0%");
            } else {
                bigMarks.add(Integer.toString(i * 10) + "%");
            }
        }

        //半径、刻度数量
        mChart.addOuterTicksAxis(0.95f, bigMarks);
        //隐藏刻度表的刻度，只留下轴线
        mChart.getPlotAxis().get(0).hideTickMarks();
        mChart.getPlotAxis().get(0).hideAxisLine();
        mChart.getPlotAxis().get(0).getTickLabelPaint().setColor(Color.WHITE);
        mChart.getPlotAxis().get(0).getTickLabelPaint().setTextSize(36f);


        /**外层环表*/
        //配置比例（存放两个参数，一个是实际数量，另一个是总数量）
        List<Float> ringPercentage = new ArrayList<>();
        float rper = MathHelper.getInstance().sub(1, mBigPercent);
        ringPercentage.add(mBigPercent);
        ringPercentage.add(rper);

        //设置颜色值表（存放两个参数，一个是已完成颜色，另外一个是底色）
        List<Integer> rcolor = new ArrayList<>();
        rcolor.add(Color.parseColor("#FFFF00"));
        rcolor.add(Color.parseColor("#40ffffff"));

        //将比例和颜色值传
        mChart.addStrokeRingAxis(0.9f, 0.88f, ringPercentage, rcolor);
        //设置内部底色
        mChart.getPlotAxis().get(1).getFillAxisPaint().setColor(Color.parseColor("#658ddc"));

        /**内层刻度线*/
        //初始化内部环表的刻度数量，及刻度显示值
        List<String> smallMarks = new ArrayList<>();
        //设置循环 增加10个刻度 数值
        for (int i = 1; i < 50; i++) {
            smallMarks.add("");
        }
        //第一个参数是环形半径，第二个是环形的刻度数量
        mChart.addOuterTicksAxis(0.5f, smallMarks);

        //设置刻度轴线颜色
        mChart.getPlotAxis().get(2).getAxisPaint().setColor(Color.DKGRAY);
        //设置设置环表的宽度
        mChart.getPlotAxis().get(2).getAxisPaint().setStrokeWidth(2);
        //设置环表上面的刻度颜色
        mChart.getPlotAxis().get(2).getTickMarksPaint().setColor(Color.WHITE);
        //隐藏轴线，只显示刻度
        mChart.getPlotAxis().get(2).hideAxisLine();
        //设置刻度粗细长短
        mChart.getPlotAxis().get(2).setDetailModeSteps(5);

        /**内层环形*/
        mChart.addCircleAxis(0.48f, Color.parseColor("#10ffffff"));
        mChart.getPlotAxis().get(3).getAxisPaint().setStyle(Paint.Style.STROKE);


        /**内层环表*/
        //配置比例（存放两个参数，一个是实际数量，另一个是总数量）
        List<Float> smallPercentage = new ArrayList<>();
        float smallRper = MathHelper.getInstance().sub(1, mSmallPercent);
        smallPercentage.add(mSmallPercent);
        smallPercentage.add(smallRper);

        //设置颜色值表（存放两个参数，一个是已完成颜色，另外一个是底色）
        List<Integer> smallColors = new ArrayList<>();
        smallColors.add(Color.parseColor("#3beb36"));
        smallColors.add(Color.parseColor("#30ffffff"));

        //将比例和颜色值传
        mChart.addStrokeRingAxis(0.49f, 0.47f, smallPercentage, smallColors);
        //设置内部底色
        mChart.getPlotAxis().get(4).getFillAxisPaint().setColor(Color.parseColor("#658ddc"));


        /**内层环形*/
        mChart.addCircleAxis(0.465f, Color.parseColor("#10ffffff"));
        mChart.getPlotAxis().get(5).getAxisPaint().setStyle(Paint.Style.STROKE);

        //环表曲线的颜色
        mChart.getPlotAxis().get(1).getAxisPaint().setColor(Color.DKGRAY);
        //环表曲线的宽度
        mChart.getPlotAxis().get(1).getAxisPaint().setStrokeWidth(5);

        //设置指针风格
        mChart.getPointer().setPointerStyle(XEnum.PointerStyle.TRIANGLE);
        mChart.getPointer().getPointerPaint().setStrokeWidth(3);
        mChart.getPointer().getPointerPaint().setStyle(Paint.Style.FILL);

        mChart.getPointer().getPointerPaint().setColor(Color.rgb(242, 110, 131));
        mChart.getPointer().getBaseCirclePaint().setColor(Color.rgb(238, 204, 71));
        mChart.getPointer().setBaseRadius(10f);
    }
}

